package repositorioJuego;

import static org.junit.Assert.*;

import java.io.File;
import java.util.Date;

import javax.naming.spi.DirectoryManager;

import modelo.carrera.Carrera;
import modelo.geometria.Vector;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import persistencia.carreras.ensambladores.xml.UsuarioXML;
import persistencia.compartido.Tipo;
import persistencia.xml.ensambladores.RegistroDeEnsambladoresXML;

import compartido.IEntidad;
import compartido.Usuario;

public class RepositorioJuegoTest {

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
		File directorio = new File(".");
		if (directorio.exists()) {
			File[] archivos = directorio.listFiles();
			for (int i = 0; i < archivos.length; i++) {
				if (archivos[i].getName().endsWith(".xml"))
					archivos[i].delete();
			}
		}		
	}

	@Test
	public void ObtenerCarrera_CarreraNoExiste() throws Exception {
		RepositorioJuego repositorio = new RepositorioJuego();
		
		Carrera carrera = repositorio.getCarrera("inexistente");
		
		assertNull(carrera);
	}
	
	@Test
	public void ObtenerCarrera_CarreraExiste() throws Exception {
		RepositorioJuego repositorio = new RepositorioJuego();
		
		Vector puntoInicialCarrera = new Vector(45,3);
		Vector puntoFinalCarrera = new Vector(41,32);
		
		Carrera original = new Carrera(1, null, new Date(), puntoInicialCarrera, puntoFinalCarrera);
		
		repositorio.guardar();
		
		Carrera carrera = repositorio.getCarrera(original.getIdentificador());
		
		assertNotNull(carrera);
	}	

	@Test
	public void CargarUsuario_ValidarUsuarios_EjecucionCorrecta() throws Exception {
		RegistroDeEnsambladoresXML registro = RegistroDeEnsambladoresXML.getInstancia();
		registro.registrar(new Tipo<IEntidad>(Usuario.class), new UsuarioXML());
		
		RepositorioJuego repositorio = new RepositorioJuego();
		
		String usuario = "esteban";
		String password = "esteban";
		
		Usuario agregado = new Usuario(usuario,password);
		repositorio.addUsuario(agregado);

		repositorio.guardar();
		
		assertNull( repositorio.getUsuario("Usuario inexistente") );
		Usuario buscado = repositorio.getUsuario(usuario);
		assertNotNull(buscado);
		assertEquals(0, buscado.compareTo(agregado));		
	}	
}
